#![allow(non_camel_case_types, non_snake_case)]
use crate::co;
use crate::decl::*;
use crate::kernel::ffi_types::*;
use crate::ole::privs::*;
use crate::prelude::*;
use crate::vt::*;
#[repr(C)]
pub struct IDXGIDeviceVT {
pub IDXGIObjectVT: IDXGIObjectVT,
pub GetAdapter: fn(COMPTR, *mut COMPTR) -> HRES,
pub CreateSurface: fn(COMPTR, *const u32, u32, u32, PCVOID, *mut COMPTR) -> HRES,
pub QueryResourceResidency: fn(COMPTR, COMPTR, *mut u32, u32) -> HRES,
pub SetGPUThreadPriority: fn(COMPTR, i32) -> HRES,
pub GetGPUThreadPriority: fn(COMPTR, *mut i32) -> HRES,
}
com_interface! { IDXGIDevice: "54ec77fa-1377-44e6-8c32-88fd5f44c84c";
}
impl dxgi_IDXGIObject for IDXGIDevice {}
impl dxgi_IDXGIDevice for IDXGIDevice {}
pub trait dxgi_IDXGIDevice: dxgi_IDXGIObject {
#[must_use]
fn CreateSurface(&self,
desc: &DXGI_SURFACE_DESC,
num_surfaces: u32,
usage: co::DXGI_USAGE,
shared_resource: Option<&DXGI_SHARED_RESOURCE>,
) -> HrResult<IDXGISurface>
{
let mut queried = unsafe { IDXGISurface::null() };
ok_to_hrresult(
unsafe {
(vt::<IDXGIDeviceVT>(self).CreateSurface)(
self.ptr(),
desc as *const _ as _,
num_surfaces,
usage.raw(),
shared_resource.map_or(std::ptr::null(), |s| s as *const _ as _),
queried.as_mut(),
)
},
).map(|_| queried)
}
fn_com_interface_get! { GetAdapter: IDXGIDeviceVT, IDXGIAdapter;
}
#[must_use]
fn GetGPUThreadPriority(&self) -> HrResult<i8> {
let mut priority = i32::default();
ok_to_hrresult(
unsafe {
(vt::<IDXGIDeviceVT>(self).GetGPUThreadPriority)(
self.ptr(),
&mut priority,
)
},
).map(|_| priority as _)
}
#[must_use]
fn QueryResourceResidency(&self,
resources: &[&impl dxgi_IDXGIResource],
) -> HrResult<Vec<co::DXGI_RESIDENCY>>
{
let mut status = vec![co::DXGI_RESIDENCY::default(); resources.len()];
ok_to_hrresult(
unsafe {
(vt::<IDXGIDeviceVT>(self).QueryResourceResidency)(
self.ptr(),
resources.as_ptr() as _,
status.as_mut_ptr() as _,
resources.len() as _,
)
},
).map(|_| status)
}
fn SetGPUThreadPriority(&self, priority: i8) -> HrResult<()> {
ok_to_hrresult(
unsafe {
(vt::<IDXGIDeviceVT>(self).SetGPUThreadPriority)(
self.ptr(),
priority as _,
)
},
)
}
}